import os
import shutil
from tempfile import NamedTemporaryFile

from fastapi import APIRouter, Path, File, UploadFile
from numba.scripts.generate_lower_listing import description

from entity.schema.chat_schema import ChatInput
from entity.schema.model_schema import ModelOutput
from models.ASR_model import wav_to_text
from service.model_chat_service import chat, get_history_all, set_session, get_history_by_session_id, chat_with_audio
from utils.base_response import BaseResponse

qwen3=APIRouter()

'''
通过会话id获取上下文环境，进行聊天
'''
@qwen3.post('/chat/{session_id}')
async def chatWithQwen3(text: ChatInput, session_id: int):
    response=await chat(text.question, session_id)
    # response=ModelOutput(answer="根据《报废机动车回收拆解企业技术规范》（GB22128），\"五大总成\"具体指：  \n1. **发动机**  \n2. **传动系统**  \n3. **行驶系统**  \n4. **转向系统**  \n5. **制动系统**  \n\n这些是车辆的核心机械部件，符合再制造条件的可依法交售给专业企业循环利用，否则作为废金属处理。  \n如果需要了解拆解标准或政策细节，可以告诉我哦~ 🚗🔧",voice="一串base64格式得编码")
    return BaseResponse(code=200, msg='success', data=response)

'''
创建会话
'''
@qwen3.post('/session/new')
async def newSession():
    result=await set_session()
    return BaseResponse(code=200, msg='success', data=result)


'''
获取历史
'''
@qwen3.get('/history/{session_id}')
async def getHistoryBySessionId(session_id: int ):
    result=await get_history_by_session_id(session_id)
    # print(result)
    return BaseResponse(code=200, msg='success', data=result)

'''
通过音频获取上下文环境，进行聊天
'''
@qwen3.post('/chat/audio/{session_id}')
async def chatWithQwen3ByAudio(
        session_id: int= Path( ...,description="会话id"),
        file: UploadFile = File(...)):
    response=await chat_with_audio(session_id, file)
    # with NamedTemporaryFile(delete=False, suffix=".wav") as tmp:
    #     shutil.copyfileobj(file.file,tmp)
    #     temp_path = tmp.name
    #
    # text =await wav_to_text(temp_path)
    # os.remove(temp_path)
    # response=ModelOutput(answer="根据《报废机动车回收拆解企业技术规范》（GB22128），\"五大总成\"具体指：  \n1. **发动机**  \n2. **传动系统**  \n3. **行驶系统**  \n4. **转向系统**  \n5. **制动系统**  \n\n这些是车辆的核心机械部件，符合再制造条件的可依法交售给专业企业循环利用，否则作为废金属处理。  \n如果需要了解拆解标准或政策细节，可以告诉我哦~ 🚗🔧",voice="一串base64格式得编码")
    return BaseResponse(code=200, msg='success', data=response)

